package com.tianqi.rms.controller;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.alibaba.fastjson.JSONObject;
import com.jfinal.core.Controller;
import com.jfinal.kit.PropKit;
import com.jfinal.weixin.sdk.api.ApiConfig;
import com.jfinal.weixin.sdk.api.ApiConfigKit;
import com.jfinal.weixin.sdk.api.ApiResult;
import com.jfinal.weixin.sdk.api.SnsAccessToken;
import com.jfinal.weixin.sdk.api.SnsAccessTokenApi;
import com.jfinal.weixin.sdk.api.UserApi;
import com.tianqi.rms.model.WeixinUser;
import com.tianqi.rms.model.business.SendInfo;
import com.tianqi.rms.model.business.Vip;
import com.tianqi.rms.sendFactory.SendFactory;
import com.tianqi.rms.sendFactory.SmsSender;
import com.tianqi.rms.util.OauthUtils;
import com.tianqi.rms.util.SmsTypeEnum;

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃@date 创建时间：2018年4月17日上午10:46:28
 * 　　┗━┓　　　┏━┛@@author 作者：yanglong
 * 　　　　┃　　　┃	Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 *
 * ━━━━━━感觉萌萌哒━━━━━━
 */
public class EnrollController extends Controller{
	String base_url = PropKit.use("a_little_config.txt").get("baseUrl")+"enroll/";
	int shop_id = Integer.parseInt(PropKit.use("a_little_config.txt").get("shop_id"));

	/**
	 *******************************************
	 * 方法名称:入口
	 * 创建人：yanglong
	 * 创建时间：2018年4月17日 下午11:44:27
	 * @return:void
	 *******************************************
	 */
	public void oauth() {
		String redirect_uri = base_url+"toEnroll";
		String return_url = OauthUtils.publicOauth(redirect_uri);
		redirect(return_url);
	}

	/**
	 *******************************************
	 * 方法名称:到注册页面
	 * 创建人：yanglong
	 * 创建时间：2018年4月17日 上午10:47:34
	 * @return:void
	 *******************************************
	 */
	public void toEnroll() {
		String code = getPara("code");
		if(code != null){
			ApiConfig ac = ApiConfigKit.getApiConfig();
			ApiConfigKit.putApiConfig(ac);
			ApiConfigKit.setThreadLocalAppId(ac.getAppId());
			String appId = ac.getAppId();
			String secret = ac.getAppSecret();
			SnsAccessToken snsAccessToken = SnsAccessTokenApi.getSnsAccessToken(appId, secret, code);
			Integer errorCode=snsAccessToken.getErrorCode();
			if(errorCode!=null) {
				redirect("/enroll/oauth");
				return;
			}
			String openId = snsAccessToken.getOpenid();
			ApiResult apiResult = UserApi.getUserInfo(openId);
			try {
				WeixinUser wxUser = WeixinUser.dao.getUserByOpenId(openId);
				if(wxUser!=null) {
					if(wxUser.getVipId()!=null) {
						redirect("/vipCentent/oauth?type=toVipCentent");
						return;
					}else if(StringUtils.isNotEmpty(wxUser.getTel())) {
						redirect("/vipCentent/tocreateUser?openId="+openId);
						return;
					}
				}
				JSONObject userObject=JSONObject.parseObject(apiResult.toString());
				if(userObject.getInteger("subscribe")==0) {
					render("qrCode.jsp");
					return;
				}
				WeixinUser.dao.saveUser(userObject, "", "");
				setAttr("openId", openId);
				render("enroll.jsp");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	public void index() {
		render("qrCode.jsp");
	}
	/**
	 *******************************************
	 * 项目名称:weixin_meifa   
	 * 方法名称:发送验证码
	 * 创建人：yanglong
	 * 创建时间：Dec 10, 2018 10:48:55 PM   
	 * @version
	 *******************************************
	 */
	public void getVerifyCode() {
		String tel = getPara("phone");
		SmsSender sender =SendFactory.prouctSend(SmsTypeEnum.VERIFYCODE);
		Map<String,Object> map =sender.Send(tel,null);
		renderJson(map);
	}
	/**
	 *******************************************
	 * 方法名称: 验证用户code并入库保存
	 * 创建人：yanglong
	 * 创建时间：2018年4月17日 下午8:16:47
	 * @return:void
	 * ApiResult apiResult = UserApi.getUserInfo(openId);
	 * JSONObject userObject=JSONObject.parseObject(apiResult.toString());
	 *******************************************
	 */
	public void saveUserPhone() {
		try {
			String tel = getPara("phone");
			String code = getPara("code");
			String openId= getPara("openId");
			Map<String,Object> map = new HashMap<String,Object>();
			SendInfo sendInfo = SendInfo.dao.readCode(code, tel);
			if(sendInfo==null) {
				//验证码验证失败
				map.put("code", "-1");
			}else {
				Date date = sendInfo.getSendTime();
				Long vcTime = date.getTime();
				Long nowTime = new Date().getTime();
				Long istime =nowTime-vcTime;
				if(istime>120000L) {
					//验证码超时
					map.put("code", "-2");
				}else {
					WeixinUser wxUser = WeixinUser.dao.getUserByOpenId(openId);
					if(wxUser!=null) {
						Vip vip = Vip.dao.getVipByUserTel(tel, shop_id);
						wxUser.setTel(tel);
						wxUser.setVipId(vip.getId());
						wxUser.setTelEncry(tel.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2"));
						wxUser.update();
						map.put("code", "1");
					}
				}
			}
			renderJson(map);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


}
